package cn.nucun.wrapper;

import cn.nucun.frame.LoginInFrame;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.sun.istack.Nullable;

import javax.swing.*;

/**
 * 登录浮窗工作流
 *
 * @author chen
 * @link https://www.cnblogs.com/hama1993/p/12034514.html
 */
public class LoginInDialog extends DialogWrapper {
    /**
     * 假如需要获取到项目名，作为该类的属性放进来
     */
    private String projectName;

    private LoginInFrame formTestSwing = new LoginInFrame();

    /**
     * DialogWrapper没有默认的无参构造方法，所以需要重写构造方法，它提供了很多重载构造方法，
     * 这里使用传project类型参数的那个，通过Project对象可以获取当前IDEA内打开的项目的一些属性，
     * 比如项目名，项目路径等
     */
    public LoginInDialog(@Nullable Project project) {
        super(true);
        //设置会话框标题
        setTitle("Login");

        //获取到当前项目的名称
        this.projectName = project.getName();
        //触发一下init方法，否则swing样式将无法展示在会话框
        init();
    }

    /**
     * 重写下面的方法，返回一个自定义的swing样式，该样式会展示在会话框的最上方的位置
     */
    @Override
    protected JComponent createNorthPanel() {
        //返回位于会话框north位置的swing样式
        return formTestSwing.initNorth();
    }

    /**
     * 重写下面的方法，返回一个自定义的swing样式，该样式会展示在会话框的最下方的位置
     */
    @Override
    protected JComponent createSouthPanel() {
        // return null 则使用默认的
        return formTestSwing.initSouth(this);
    }

    /**
     * 重写下面的方法，返回一个自定义的swing样式，该样式会展示在会话框的中央位置
     */
    @Override
    protected JComponent createCenterPanel() {
        //定义表单的主题，放置到IDEA会话框的中央位置
        return formTestSwing.initCenter();
    }
}
